package com.dangdang.util;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class JedisUtils {
    //声明连接池对象
    private static JedisPool pool;
    static{
        //读取redis.properties文件到流中
        InputStream is = JedisUtils.class.getResourceAsStream("/redis.properties");
        //创建Properties对象
        Properties properties = new Properties();
        try {
            //加载
            properties.load(is);
            //关闭流
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        //创建连接池的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大空闲连接数, 默认8个
        String maxIdle = properties.getProperty("redis.maxIdle");
        if(maxIdle != null){
            config.setMaxIdle(Integer.parseInt(maxIdle));
        }
        //设置最小空闲连接数，默认8个
        String minIdle = properties.getProperty("redis.minIdle");
        if(minIdle != null){
            config.setMinIdle(Integer.parseInt(minIdle));
        }
        //设置可用连接实例的最大数目，默认值为8
        String maxTotal = properties.getProperty("redis.maxTotal");
        if(maxTotal != null){
            config.setMaxTotal(Integer.parseInt(maxTotal));
        }
        //设置没有空闲连接时，最大的等待毫秒数
        String maxWaitMillis = properties.getProperty("redis.maxWaitMillis");
        if (maxWaitMillis != null) {
            config.setMaxWaitMillis(Long.parseLong(maxWaitMillis));
        }
        //设置从连接池获取连接时，是否检测连接的有效性
        String testOnBorrow = properties.getProperty("redis.testOnBorrow");
        if(testOnBorrow != null){
            config.setTestOnBorrow(Boolean.parseBoolean(testOnBorrow));
        }
        //设置redis机器ip
        String hostName = properties.getProperty("redis.hostName");
        //设置redis端口号
        String port = properties.getProperty("redis.port");
        //创建连接池对象
        pool = new JedisPool(config, hostName, Integer.parseInt(port == null ? "6379" : port));
    }
    public static Jedis getJedis(){
        //获取连接
        return pool.getResource();
    }

    public static void close(Jedis jedis){
        //释放资源
        if(jedis != null){
            jedis.close();
        }
    }
}
